home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib07.dsk
/
VARIABLE CROSS REF.bas
< prev
Wrap
BASIC Source File
|
2023-02-26
|
5KB
|
120 lines
2 REM **************************
3 REM * VARIABLE CROSS REF *
4 REM * BY DOUG SPRINKLE *
5 REM * COPYRIGHT (C) 1982 *
6 REM * BY MICRO-SPARC, INC *
7 REM * LINCOLN, MA. 01773 *
8 REM **************************
10 POKE 33,40: GOTO 42
12 FOR SN = N0% TO L
14 MX = SN:T$ = V$(SN)
16 FOR SF = SN TO L
18 IF V$(SF) > = T$ THEN NEXT SF: GOTO 24
20 T$ = V$(SF):MX = SF
22 NEXT SF
24 IF MX = SN THEN NEXT SN: GOTO 160
26 REM SWAP FIELDS
28 T$ = V$(SN):V$(SN) = V$(MX):V$(MX) = T$:T = LN(SN):LN(SN) = LN(MX):LN(MX) = T: NEXT SN
30 REM SORT COMPLETE
32 GOTO 162
34 FOR JK = N0% TO CL: REM VARIABLE AREADY FOUND IN THIS LINE?
36 IF T$ = F$(JK) THEN 124
38 NEXT JK
40 GOTO 120
42 B3$ = " ":LP$ = "(":TH% = 256:T7% = 37:T6% = 36:S4% = 64:F7% = 47:F8% = 58:T4% = 34:N1% = 1:N0% = 0:S5% = 65:N9% = 91:P5 = .5:N2% = 2:N3% = 3:N4% = 4:CL = 1
44 BL$ = " ":N6% = 6:NT% = 10:NN% = 91:Y$ = "Y":N$ = "N":HH% = 178:FT% = 40
46 DIM V$(2000),F$(40),LN(2000)
48 AD = 2049: REM BEGINNING ADDRESS
50 HOME : VTAB 10: HTAB 13: PRINT "NOW PROCESSING": VTAB 12: HTAB 15: PRINT "LINE ";
52 NA = PEEK(AD) +TH% * PEEK(AD +N1%): REM NEXT ADDRESS
54 IF NA <P5 THEN 146
56 LN = PEEK(AD +N2%) +TH% * PEEK(AD +N3%) -TH%: REM CURRENT LINE NUMBER
57 IF LN <0 THEN AD = NA: GOTO 52
58 HTAB 20: PRINT LN;
60 K = AD +N4%:K1 = AD +TH%
62 FOR J = K TO K1
64 CH = PEEK(J)
66 IF CH = N0% THEN 128: REM END OF LINE
68 IF CH >S4% AND CH <N9% THEN 92: REM VARIABLE NAME FOUND
70 IF CH < >T4% THEN 80: REM 34="
72 REM QUOTATION MARK FOUND
74 J = J +N1%:CH = PEEK(J)
75 IF CH = N0% THEN 128: REM END OF LINE
76 IF CH < >T4% THEN 74
78 NEXT J
80 IF CH < >HH% AND CH < >131 THEN 90
82 REM REM TOKEN OR DATA TOKEN FOUND
84 J = J +N1%:CH = PEEK(J)
86 IF CH = N0% THEN 128: REM END OF LINE
88 IF CH < >F8% THEN 84: REM COLON?
90 NEXT J
92 REM
94 REM THIS ROUTINE DETERMINES
96 REM ALL CHARACTERS IN THE
98 REM VARIABLE NAME (INCLUDING %,$ AND "(" )
100 REM AND SAVES VAR NAME IN V$()
102 REM AND LINE# IN LN()
104 REM
106 T$ = CHR$(CH)
108 J = J +N1%:CH = PEEK(J)
110 IF (CH >S4% AND CH <NN%) OR (CH >F7% AND CH <F8%) THEN T$ = T$ + CHR$(CH): GOTO 108: REM ALPHA-NUMERIC CHARACTER FOUND
112 IF CH = T7% OR CH = T6% THEN T$ = T$ + CHR$(CH):J = J +N1%:CH = PEEK(J)
114 IF CH = FT% THEN T$ = T$ +LP$: GOTO 34
116 REM VARIABLE COMPLETED
118 GOTO 34
120 F$(CL) = T$:CL = CL +N1%
122 V$(L) = T$:LN(L) = LN:L = L +N1%: REM SAVE VARIABLE AND LINE NO.
124 IF CH = N0% THEN 128
126 GOTO 64: REM NEXT CHAR
128 REM
130 REM END OF LINE FOUND
132 REM
134 REM THIS ROUTINE PROCESSES THE NEXT LINE
136 REM
138 CL = N0%: REM RESET CL (MULTIPLE ENTRIES OF SAME VARIABLE ON SAME LINE)
140 FOR JK = N0% TO NT%:F$(JK) = "": NEXT JK
142 AD = NA: REM BEGINNING OF LINE
144 GOTO 52
146 REM
148 REM END OF USER PROGRAM
150 REM
152 REM NOW SORT ARRAY V$
154 REM
156 HOME : FLASH : VTAB 12: HTAB 18: PRINT "SORTING": NORMAL
158 GOTO 12
160 REM
162 REM NOW PRINT RESULTS
164 REM
166 HOME : VTAB 10: HTAB 12: PRINT "PRINT RESULTS (Y/N) ";: GET A$: IF A$ < >Y$ AND A$ < >N$ THEN 166
168 IF A$ = N$ THEN GOTO 174
170 VTAB 12: HTAB 12: PRINT "ENTER PRINTER SLOT NO. ";: GET SN$: IF VAL(SN$) >0 THEN VTAB 14: HTAB 12: INPUT "ENTER PRINTER SETUP STRING ";A$:SN% = VAL(SN$): PR# SN%: PRINT A$: GOTO 174
172 PRINT CHR$(7): GOTO 170
174 HOME
176 FOR I = N1% TO L
178 PRINT V$(I);BL$; TAB( N6%)LN(I);B3$;
180 IF V$(I) < >V$(I +N1%) THEN 187
182 IF PEEK(T6%) >T4% THEN PRINT : HTAB N6%
184 PRINT LN(I +N1%);B3$;:I = I +N1%
186 GOTO 180
187 PRINT :KB = PEEK( -16384): POKE -16368,0: IF KB >127 THEN INPUT A$
188 NEXT I
190 PR# 0
192 PRINT : PRINT "SEE IT AGAIN? (Y/N)? ";: GET A$: IF A$ = Y$ THEN GOTO 164
194 END
40000 D$ = CHR$(4): PRINT D$;"OPEN XREF": PRINT D$"CLOSE": PRINT D$;"DELETE XREF": PRINT D$;"OPEN XREF": PRINT D$;"WRITE XREF"
40010 POKE 33,30
40020 LIST 62000,62070
40030 PRINT "RUN62000"
40040 LIST 1,255
40045 PRINT "DEL62000,62070"
40050 PRINT "RUN"
40060 PRINT D$;"CLOSE XREF"
40070 TEXT : END
62000 N1% = 1:TH% = 256:N2% = 2:N3% = 3:EL = 61500
62010 AD = 8 *TH% +N1%: REM BEGINNING ADDRESS
62020 FOR I = 0 TO 59999
62030 NA = PEEK(AD) +TH% * PEEK(AD +N1%): REM NEXT ADDRESS
62040 X% = PEEK(AD +N3%) +N1%: POKE (AD +N3%),X%
62050 LN = TH% * PEEK(NA +N3%) + PEEK(NA +N2%): IF LN >EL THEN 62070
62060 AD = NA: NEXT I
62070 END